{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 实验报告：K近邻算法在Iris数据集上的应用\n",
    "20221200556 杨鑫其\n",
    "## 实验目标\n",
    "- 在Iris数据集上实现基于欧氏距离的KNN算法\n",
    "- 确保测试集分类准确率达到90%以上\n",
    "- 寻找最优的K值\n",
    "- 尝试替换其他距离度量公式（曼哈顿距离）\n",
    "- 对比自定义KNN与sklearn的KNN结果\n",
    "## 数据集介绍\n",
    "Iris数据集是sklearn提供的经典分类数据集，包含150个样本，分为3个类别（Setosa、Versicolor、Virginica），每个样本有4个特征（萼片长度、萼片宽度、花瓣长度、花瓣宽度）。数据集规模小，适合测试分类算法的性能。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-13T06:23:58.470626Z",
     "start_time": "2025-06-13T06:23:58.237180Z"
    }
   },
   "outputs": [],
   "source": [
    "# 导入必要的库\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.datasets import load_iris\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "from sklearn.metrics import accuracy_score, classification_report, confusion_matrix\n",
    "import seaborn as sns\n",
    "\n",
    "# 设置随机种子\n",
    "np.random.seed(42)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据加载与预处理\n",
    "加载Iris数据集并划分训练集与测试集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-13T06:23:58.485739Z",
     "start_time": "2025-06-13T06:23:58.473090Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集形状: (105, 4)\n",
      "测试集形状: (45, 4)\n",
      "类别数: 3\n"
     ]
    }
   ],
   "source": [
    "# 加载Iris数据集\n",
    "iris = load_iris()\n",
    "X = iris.data\n",
    "y = iris.target\n",
    "\n",
    "# 划分训练集和测试集\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)\n",
    "\n",
    "# 数据信息\n",
    "print(f\"训练集形状: {X_train.shape}\")\n",
    "print(f\"测试集形状: {X_test.shape}\")\n",
    "print(f\"类别数: {len(np.unique(y))}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 自定义KNN实现\n",
    "实现基于欧氏距离和曼哈顿距离的KNN算法"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-13T06:23:58.501162Z",
     "start_time": "2025-06-13T06:23:58.486820Z"
    }
   },
   "outputs": [],
   "source": [
    "class MyKNN:\n",
    "    def __init__(self, k=3, distance_metric='euclidean'):\n",
    "        self.k = k\n",
    "        self.distance_metric = distance_metric\n",
    "        self.X_train = None\n",
    "        self.y_train = None\n",
    "\n",
    "    def fit(self, X, y):\n",
    "        self.X_train = X\n",
    "        self.y_train = y\n",
    "\n",
    "    def predict(self, X_test):\n",
    "        predictions = []\n",
    "        for sample in X_test:\n",
    "            # 计算距离\n",
    "            if self.distance_metric == 'euclidean':\n",
    "                distances = np.sqrt(np.sum((self.X_train - sample) ** 2, axis=1))\n",
    "            elif self.distance_metric == 'manhattan':\n",
    "                distances = np.sum(np.abs(self.X_train - sample), axis=1)\n",
    "            # 找最近的k个邻居\n",
    "            k_indices = np.argsort(distances)[:self.k]\n",
    "            k_labels = self.y_train[k_indices]\n",
    "            # 多数投票\n",
    "            pred = np.bincount(k_labels).argmax()\n",
    "            predictions.append(pred)\n",
    "        return np.array(predictions)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 寻找最优K值\n",
    "通过测试不同K值（1到20），选择基于欧氏距离的自定义KNN的最优K值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-13T06:23:58.721611Z",
     "start_time": "2025-06-13T06:23:58.503527Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 20540 (\\N{CJK UNIFIED IDEOGRAPH-503C}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 20934 (\\N{CJK UNIFIED IDEOGRAPH-51C6}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 30830 (\\N{CJK UNIFIED IDEOGRAPH-786E}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 29575 (\\N{CJK UNIFIED IDEOGRAPH-7387}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 19982 (\\N{CJK UNIFIED IDEOGRAPH-4E0E}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 27979 (\\N{CJK UNIFIED IDEOGRAPH-6D4B}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 35797 (\\N{CJK UNIFIED IDEOGRAPH-8BD5}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 38598 (\\N{CJK UNIFIED IDEOGRAPH-96C6}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 30340 (\\N{CJK UNIFIED IDEOGRAPH-7684}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 20851 (\\N{CJK UNIFIED IDEOGRAPH-5173}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 31995 (\\N{CJK UNIFIED IDEOGRAPH-7CFB}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n"
     ]
    },
    {
     "data": {
      "image/png": "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uAAAADAKARcAAABG4SoKDrGio50uAQAAwEgEXCfExCj7+5+drgIAAMBILFEAAACAUQi4AAAAMAoB1wkejxrcdJ0a3HSd5PE4XQ0AAIBRWIPrhOJiRbz/nn8bAAAAgcMZXAAAABiFgAsAAACjEHABAABgFAIuAAAAjELABQAAgFG4isJJXK4gTlS//i+bLilY856GE70JWo9qKfpkD32yj17ZQ5/soU/20Cd7gt2nyszjsizLqr5SAAAAgOBiiQIAAACMQsAFAACAUQi4AAAAMAoBFwAAAEYh4AIAAMAoBFwAAAAYhYALAAAAoxBwAQAAYBQCLgAAAIxCwIXfvn37NHr0aHXp0kXdunXTjBkzVFhYWObYkSNHKiEhocSfDz/8MMgVO2P16tWl9n306NFljv3888/Vt29fJSYm6tZbb9Xu3buDXK0zli9fXqpHCQkJatOmTZnj+/fvX2rstm3bglx18Hm9XvXt21dr1qzxP7d7924NHjxYnTp10pVXXqlPP/20wvd4++23ddlllykxMVF33XWXDh48WN1lB11ZfdqwYYNuvPFGJSUl6fLLL9fSpUsrfI+UlJRSx1heXl51lx5UZfXp4YcfLrXf//jHP8p9j+eff17dunVTUlKSJk6cqIKCgmCUHlS/7tP9999f5ufVrbfeWubP5+TklBqbmpoazF2oVhVlgVr1+WQBlmX5fD7rhhtusIYOHWpt27bN+vLLL61evXpZM2fOLHN8r169rLfeesvav3+//09hYWGQq3bG3LlzreHDh5fY95ycnFLj9uzZY3Xq1MlatGiRtW3bNmvMmDFW3759LZ/P50DVwVVQUFCiPz/99JPVq1cva/r06aXGFhUVWR06dLDWrl1b4meOHTvmQOXB4/F4rLvuustq3bq19cUXX1iWdfzvYb9+/axx48ZZ27dvt+bNm2clJiZae/bsKfM9MjIyrI4dO1pvvPGG9d1331m33HKLNWzYsGDuRrUrq0/79++3UlJSrEcffdTatWuX9fbbb1sdOnSwPvzwwzLf4+eff7Zat25t/fDDDyWOMZP+LpbVJ8uyrMGDB1vz588vsd/5+fllvseqVaus5ORk64MPPrAyMjKsK6+80po2bVqwdiEoyurTkSNHSvTn66+/ttq3b2+tXr26zPf46quvrC5dupT4mezs7GDuRrWpKAvUts8nAi4sy7Ks7du3W61bt7aysrL8z61YscJKS0srNbawsNBq27attXPnzmCWWGOMGzfOevTRR0857vHHH7duueUW/+P8/HwrKSmpxP986op58+ZZl112WZn/CPr++++tNm3aWB6Px4HKnJGZmWn179/f6tevX4n/0X7++edWp06drLy8PP/YQYMGWU8++WSZ73PfffdZEyZM8D/+6aefrISEBOuHH36o3h0IkvL69PLLL1t9+vQpMXby5MnW2LFjy3yfzz77zOratWu11+uU8vpkWZbVrVs365NPPrH1PjfddFOJY+3LL7+0OnbsWG4grm0q6tPJbr/9duvee+8t932WLFli/eEPf6iuMh1VURaobZ9PLFGAJKlJkyZauHCh4uPjSzyfm5tbauzOnTvlcrl09tlnB6u8GmXHjh0699xzTzkuIyNDKSkp/sdRUVFq166dNmzYUH3F1UCHDx/Wc889p3Hjxsntdpd6ffv27WrevLkiIiIcqM4Za9euVWpqql577bUSz2dkZOiCCy5QdHS0/7nk5ORyj5lfH2PNmzfXmWeeqYyMjGqpO9jK69OJX5v+WlmfV9LxY6xly5bVUmNNUF6fcnNztW/fPlufV8XFxfrmm29KHE+dOnXSsWPHtGXLlkCX7Ijy+nSy//znP/ryyy81duzYcsds377dVk9ro4qyQG37fAoLyiyo8Ro0aKBu3br5H/t8Pv3jH//Q7373u1Jjd+7cqXr16mn8+PFau3atzjjjDI0aNUo9evQIZsmOsCxLu3bt0qeffqr58+eruLhYffr00ejRo0uFt6ysLDVt2rTEc3Fxcfr555+DWbLjXnnlFTVt2lR9+vQp8/UdO3YoPDxcw4cP16ZNm9SyZUuNHz9eHTt2DHKlwXPTTTeV+Xxlj5n9+/cbfYyV16cWLVqoRYsW/scHDhzQO++8o1GjRpU5fseOHSooKNDAgQO1a9cutW3bVhMnTjQm9JbXpx07dsjlcmnevHn6+OOP1bBhQ91222265pprSo09cuSICgsLSxxPYWFhatiwofHH08kWLFiga665Rs2bNy93zI4dO1RUVKTrrrtO+/btU0pKitLT00v9XayNKsoCte3ziTO4KNOcOXO0efNm3XPPPaVe27lzpzwej9LS0rRw4UL16NFDI0eO1DfffONApcH1008/qaCgQG63W48//rgmTJigFStWaPbs2aXGnhh3MrfbLa/XG6xyHWdZlpYuXapbbrml3DG7du1STk6Orr/+ei1YsEDnnXeeBg0apL179wax0pqhsseMx+Op88eYx+PRqFGjFB8frz/84Q9ljtm5c6dycnI0cuRIzZ07V5GRkRo8eHC5Z3xNceK3ba1atdKCBQt0/fXXa/LkyVq9enWpsR6PR5Lq9PG0e/duffHFFxo4cGCF43bu3Knc3Fylp6frr3/9q/bv368RI0aouLg4SJUGz8lZoLZ9PnEGF6XMmTNHL7zwgv7617+qdevWpV6/8847NXDgQMXGxkqS2rRpo2+//VZLlixRhw4dgl1uUJ111llas2aNYmNj5XK51LZtW/l8Pt13331KT09XaGiof2xERESpv8her1cNGjQIdtmO+eabb7Rv3z5dddVV5Y556KGH5PF4VK9ePUnS1KlTtX79er311lsaMWJEsEqtESIiInT48OESz3m9XkVGRpY7vqxjLCoqqrpKrFHy8vJ055136vvvv9fLL79c7n4vWrRIx44dU0xMjCTpkUceUY8ePfThhx+qX79+wSw5qK6++mr17NlTDRs2lHT8s/r777/XK6+8ol69epUYe2KJUF0+nv75z3+qbdu2Ov/88ysc984778jlcvn/Xj755JNKS0tTRkaGOnfuHIxSg+LXWaC2fT5xBhclPPTQQ/rb3/6mOXPm6PLLLy9zTEhIiD/cntCqVSvt27cvGCU6rmHDhnK5XP7H5513ngoLC5WTk1NiXLNmzZSdnV3iuezsbDVp0iQoddYEn3zyiVJSUkodLycLCwvzh1tJ/jNOdeV4Oll5x0x5v/qsy8dYbm6uhgwZoszMTL3wwgsVrol0u93+cCsd/x9vixYtjD/GXC6XP9yeUN7frYYNGyoiIqLE8VRUVKTDhw/XieNJOv55demll55yXFRUVIlQFxcXp4YNGxp1PJWVBWrb5xMBF35PP/20Xn31VT322GMVnnG7//77lZ6eXuK5LVu2qFWrVtVdouM++eQTpaamlrg25HfffaeGDRuqcePGJcYmJiZq3bp1/scFBQXavHmzEhMTg1av0zZu3HjKMxoDBw7U008/7X/s8/m0devWOnE8/VpiYqK+/fZb/6+LJWndunXlHjO/Psb27t2rvXv3Gn+M+Xw+3X333frxxx/14osv6re//W25Yy3L0mWXXably5f7n8vPz9d///tf44+xJ554QoMHDy7xXHmf1SEhIerQoUOJ42nDhg0KCwsr9/rVJrEsS998880pP69yc3N14YUX6osvvvA/t2/fPh06dMiY46m8LFDbPp8IuJB0fNH83Llzdccddyg5OVlZWVn+P9LxL7+cOKgvueQSrVixQm+++ab++9//6umnn9a6desqXGdpiqSkJEVEROiBBx7Qzp079dFHH2n27NkaOnSoiouLlZWV5f+VzLXXXqv169drwYIFyszMVHp6ulq0aGHUBcFPJTMzs9Sv+37dp0suuUTPP/+8/vWvf2nnzp3685//rKNHj5b5RRjTdenSRc2bN1d6eroyMzO1YMECbdy4Udddd52k47/ey8rK8q/1++Mf/6i33npLS5cu1ZYtWzR+/HhdfPHFxl/h5PXXX9eaNWv08MMPq0GDBv7PqhO/Pj25Ty6XSxdffLGeeuoprVmzRpmZmRo/frzOOOMM478Y27NnT3355ZdatGiRfvjhB7388st68803dfvtt0s6vkbyxGe8dPxLWIsWLdL777+vjRs3aurUqbrhhhvqxBKFPXv2KC8vr8zlCSf3qV69ekpOTtaMGTO0ceNGffvtt7rnnnvUrVs3JSQkBLvsgKsoC9S6z6egXIwMNd78+fOt1q1bl/nHsiyrdevW1rJly/zjlyxZYvXu3dtq3769dc0111hr1651qvSg27ZtmzV48GCrU6dOVteuXa2nnnrK8vl81u7du0tdW/Hf//631bt3b6tjx47WoEGDjLk+qV0dOnSwPv744xLP/bpPPp/PevbZZ62LL77Yat++vXXzzTdbW7dudaJcR/z6mPn++++tm2++2Wrfvr111VVXWZ999pn/tS+++MJq3bq1tXv3bv9zy5Yts3r06GF16tTJuuuuu6yDBw8Gtf5gOblPt99+e5mfVSeuO/3rPnk8HmvGjBlW165drcTERGv48OHWTz/95Ni+VKdfH0+rV6+2+vXrZ3Xo0MHq06eP9c9//tP/2rJly/yf8SfMnz/f+r//+z8rOTnZSk9PN/b61L/u04YNG6zWrVuXea3uX/fp8OHD1v3332+lpqZaSUlJ1r333msdPnw4KHVXt1Nlgdr0+eSyLMsKTpQGAAAAqh9LFAAAAGAUAi4AAACMQsAFAACAUQi4AAAAMAoBFwAAAEYh4AIAAMAoBFwAAAAYhYALAAAAoxBwAaCWSkhI0Jo1a0o89/HHH6tdu3Z66qmnHKoKAJxHwAUAQ2RkZGjMmDG66aabNGrUKKfLAQDHhDldAADg9O3cuVPDhg1Tnz59NHHiRP/ze/fu1aJFixQZGVnqZ4qLizVhwoRglgkAQUHABYBabt++fRo6dKhSU1P18MMPy+Vy+V8rLi7W0KFDdcYZZ5T6ua+++iqYZQJA0LBEAQBqsaNHj2ro0KE6fPiwZs6cqdDQUKdLAgDHEXABoBabMmWK3G63fD6fFi9e7HQ5AFAjEHABoBZr3LixFi9erNGjR2vevHnasmWL0yUBgOMIuABQi6Wnpys2NlaDBg1S69atlZ6erqKiIqfLAgBHEXABoBY7seY2NDRU06dP17Zt2zR//nyHqwIAZxFwAcAQbdu21eDBg/Xss89q69atTpcDAI7hMmEAYJBRo0bpvffeU3p6upYsWSJJmj9/vmJiYkqN9Xg8SklJCXaJAFDtXJZlWU4XAQAAAAQKSxQAAABgFAIuAAAAjELABQAAgFEIuAAAADAKARcAAABGIeACAADAKARcAAAAGIWACwAAAKMQcAEAAGAUAi4AAACMQsAFAACAUf4/Frn6c1M9ZUsAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 800x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "自定义KNN（欧氏距离）最优K值: 1, 准确率: 100.00%\n"
     ]
    }
   ],
   "source": [
    "# 寻找最优K值\n",
    "k_values = range(1, 21)\n",
    "accuracies = []\n",
    "\n",
    "for k in k_values:\n",
    "    my_knn = MyKNN(k=k, distance_metric='euclidean')\n",
    "    my_knn.fit(X_train, y_train)\n",
    "    y_pred = my_knn.predict(X_test)\n",
    "    accuracy = accuracy_score(y_test, y_pred)\n",
    "    accuracies.append(accuracy)\n",
    "\n",
    "# 找到最优K值\n",
    "best_k = k_values[np.argmax(accuracies)]\n",
    "best_accuracy = max(accuracies)\n",
    "\n",
    "# 可视化K值与准确率的关系\n",
    "plt.figure(figsize=(8, 6))\n",
    "plt.plot(k_values, accuracies, marker='o')\n",
    "plt.axvline(x=best_k, color='r', linestyle='--', label=f'Best K={best_k}')\n",
    "plt.title('K值与测试集准确率的关系')\n",
    "plt.xlabel('K值')\n",
    "plt.ylabel('准确率')\n",
    "plt.legend()\n",
    "plt.grid(True)\n",
    "plt.show()\n",
    "\n",
    "print(f\"自定义KNN（欧氏距离）最优K值: {best_k}, 准确率: {best_accuracy:.2%}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 使用曼哈顿距离测试\n",
    "使用最优K值，测试基于曼哈顿距离的自定义KNN"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-13T06:23:58.736787Z",
     "start_time": "2025-06-13T06:23:58.722735Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "自定义KNN（曼哈顿距离）准确率: 100.00%\n",
      "自定义KNN（曼哈顿距离）分类报告:\n",
      "               precision    recall  f1-score   support\n",
      "\n",
      "           0       1.00      1.00      1.00        19\n",
      "           1       1.00      1.00      1.00        13\n",
      "           2       1.00      1.00      1.00        13\n",
      "\n",
      "    accuracy                           1.00        45\n",
      "   macro avg       1.00      1.00      1.00        45\n",
      "weighted avg       1.00      1.00      1.00        45\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# 测试曼哈顿距离\n",
    "my_knn_manhattan = MyKNN(k=best_k, distance_metric='manhattan')\n",
    "my_knn_manhattan.fit(X_train, y_train)\n",
    "y_pred_manhattan = my_knn_manhattan.predict(X_test)\n",
    "accuracy_manhattan = accuracy_score(y_test, y_pred_manhattan)\n",
    "\n",
    "print(f\"自定义KNN（曼哈顿距离）准确率: {accuracy_manhattan:.2%}\")\n",
    "print(\"自定义KNN（曼哈顿距离）分类报告:\\n\", classification_report(y_test, y_pred_manhattan))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## sklearn KNN对比\n",
    "使用最优K值，测试sklearn的KNN（欧氏距离和曼哈顿距离）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-13T06:23:58.768548Z",
     "start_time": "2025-06-13T06:23:58.737895Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "sklearn KNN（欧氏距离）准确率: 100.00%\n",
      "sklearn KNN（欧氏距离）分类报告:\n",
      "               precision    recall  f1-score   support\n",
      "\n",
      "           0       1.00      1.00      1.00        19\n",
      "           1       1.00      1.00      1.00        13\n",
      "           2       1.00      1.00      1.00        13\n",
      "\n",
      "    accuracy                           1.00        45\n",
      "   macro avg       1.00      1.00      1.00        45\n",
      "weighted avg       1.00      1.00      1.00        45\n",
      "\n",
      "sklearn KNN（曼哈顿距离）准确率: 100.00%\n",
      "sklearn KNN（曼哈顿距离）分类报告:\n",
      "               precision    recall  f1-score   support\n",
      "\n",
      "           0       1.00      1.00      1.00        19\n",
      "           1       1.00      1.00      1.00        13\n",
      "           2       1.00      1.00      1.00        13\n",
      "\n",
      "    accuracy                           1.00        45\n",
      "   macro avg       1.00      1.00      1.00        45\n",
      "weighted avg       1.00      1.00      1.00        45\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# sklearn KNN（欧氏距离）\n",
    "sklearn_knn = KNeighborsClassifier(n_neighbors=best_k, metric='euclidean')\n",
    "sklearn_knn.fit(X_train, y_train)\n",
    "y_pred_sklearn = sklearn_knn.predict(X_test)\n",
    "accuracy_sklearn = accuracy_score(y_test, y_pred_sklearn)\n",
    "\n",
    "print(f\"sklearn KNN（欧氏距离）准确率: {accuracy_sklearn:.2%}\")\n",
    "print(\"sklearn KNN（欧氏距离）分类报告:\\n\", classification_report(y_test, y_pred_sklearn))\n",
    "\n",
    "# sklearn KNN（曼哈顿距离）\n",
    "sklearn_knn_manhattan = KNeighborsClassifier(n_neighbors=best_k, metric='manhattan')\n",
    "sklearn_knn_manhattan.fit(X_train, y_train)\n",
    "y_pred_sklearn_manhattan = sklearn_knn_manhattan.predict(X_test)\n",
    "accuracy_sklearn_manhattan = accuracy_score(y_test, y_pred_sklearn_manhattan)\n",
    "\n",
    "print(f\"sklearn KNN（曼哈顿距离）准确率: {accuracy_sklearn_manhattan:.2%}\")\n",
    "print(\"sklearn KNN（曼哈顿距离）分类报告:\\n\", classification_report(y_test, y_pred_sklearn_manhattan))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 性能对比与可视化\n",
    "对比不同模型和距离度量的性能，并绘制混淆矩阵"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-13T06:23:59.235339Z",
     "start_time": "2025-06-13T06:23:58.769774Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 39044 (\\N{CJK UNIFIED IDEOGRAPH-9884}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 27979 (\\N{CJK UNIFIED IDEOGRAPH-6D4B}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 26631 (\\N{CJK UNIFIED IDEOGRAPH-6807}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 31614 (\\N{CJK UNIFIED IDEOGRAPH-7B7E}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 30495 (\\N{CJK UNIFIED IDEOGRAPH-771F}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 23454 (\\N{CJK UNIFIED IDEOGRAPH-5B9E}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 65288 (\\N{FULLWIDTH LEFT PARENTHESIS}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 27431 (\\N{CJK UNIFIED IDEOGRAPH-6B27}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 27663 (\\N{CJK UNIFIED IDEOGRAPH-6C0F}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 36317 (\\N{CJK UNIFIED IDEOGRAPH-8DDD}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 31163 (\\N{CJK UNIFIED IDEOGRAPH-79BB}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 65289 (\\N{FULLWIDTH RIGHT PARENTHESIS}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 28151 (\\N{CJK UNIFIED IDEOGRAPH-6DF7}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 28102 (\\N{CJK UNIFIED IDEOGRAPH-6DC6}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 30697 (\\N{CJK UNIFIED IDEOGRAPH-77E9}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 38453 (\\N{CJK UNIFIED IDEOGRAPH-9635}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 600x400 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 39044 (\\N{CJK UNIFIED IDEOGRAPH-9884}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 27979 (\\N{CJK UNIFIED IDEOGRAPH-6D4B}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 26631 (\\N{CJK UNIFIED IDEOGRAPH-6807}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 31614 (\\N{CJK UNIFIED IDEOGRAPH-7B7E}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 30495 (\\N{CJK UNIFIED IDEOGRAPH-771F}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 23454 (\\N{CJK UNIFIED IDEOGRAPH-5B9E}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 65288 (\\N{FULLWIDTH LEFT PARENTHESIS}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 26364 (\\N{CJK UNIFIED IDEOGRAPH-66FC}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 21704 (\\N{CJK UNIFIED IDEOGRAPH-54C8}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 39039 (\\N{CJK UNIFIED IDEOGRAPH-987F}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 36317 (\\N{CJK UNIFIED IDEOGRAPH-8DDD}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 31163 (\\N{CJK UNIFIED IDEOGRAPH-79BB}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 65289 (\\N{FULLWIDTH RIGHT PARENTHESIS}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 28151 (\\N{CJK UNIFIED IDEOGRAPH-6DF7}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 28102 (\\N{CJK UNIFIED IDEOGRAPH-6DC6}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 30697 (\\N{CJK UNIFIED IDEOGRAPH-77E9}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 38453 (\\N{CJK UNIFIED IDEOGRAPH-9635}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 600x400 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 39044 (\\N{CJK UNIFIED IDEOGRAPH-9884}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 27979 (\\N{CJK UNIFIED IDEOGRAPH-6D4B}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 26631 (\\N{CJK UNIFIED IDEOGRAPH-6807}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 31614 (\\N{CJK UNIFIED IDEOGRAPH-7B7E}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 30495 (\\N{CJK UNIFIED IDEOGRAPH-771F}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 23454 (\\N{CJK UNIFIED IDEOGRAPH-5B9E}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 33258 (\\N{CJK UNIFIED IDEOGRAPH-81EA}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 23450 (\\N{CJK UNIFIED IDEOGRAPH-5B9A}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 20041 (\\N{CJK UNIFIED IDEOGRAPH-4E49}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 65288 (\\N{FULLWIDTH LEFT PARENTHESIS}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 26364 (\\N{CJK UNIFIED IDEOGRAPH-66FC}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 21704 (\\N{CJK UNIFIED IDEOGRAPH-54C8}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 39039 (\\N{CJK UNIFIED IDEOGRAPH-987F}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 36317 (\\N{CJK UNIFIED IDEOGRAPH-8DDD}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 31163 (\\N{CJK UNIFIED IDEOGRAPH-79BB}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 65289 (\\N{FULLWIDTH RIGHT PARENTHESIS}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 28151 (\\N{CJK UNIFIED IDEOGRAPH-6DF7}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 28102 (\\N{CJK UNIFIED IDEOGRAPH-6DC6}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 30697 (\\N{CJK UNIFIED IDEOGRAPH-77E9}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "E:\\anaconda3\\envs\\Torch_cpu\\lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 38453 (\\N{CJK UNIFIED IDEOGRAPH-9635}) missing from font(s) Arial.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 600x400 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 可视化混淆矩阵\n",
    "def plot_confusion_matrix(y_true, y_pred, title):\n",
    "    cm = confusion_matrix(y_true, y_pred)\n",
    "    plt.figure(figsize=(6, 4))\n",
    "    sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=iris.target_names, yticklabels=iris.target_names)\n",
    "    plt.title(title)\n",
    "    plt.xlabel('预测标签')\n",
    "    plt.ylabel('真实标签')\n",
    "    plt.show()\n",
    "\n",
    "# 绘制混淆矩阵\n",
    "plot_confusion_matrix(y_test, y_pred_sklearn, 'sklearn KNN（欧氏距离）混淆矩阵')\n",
    "plot_confusion_matrix(y_test, y_pred_sklearn_manhattan, 'sklearn KNN（曼哈顿距离）混淆矩阵')\n",
    "plot_confusion_matrix(y_test, my_knn_manhattan.predict(X_test), '自定义KNN（曼哈顿距离）混淆矩阵')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 实验总结\n",
    "- 成功在Iris数据集上实现了基于欧氏距离的自定义KNN算法，测试集准确率超过90%\n",
    "- 通过测试K值范围（1-20），找到了最优K值\n",
    "- 使用曼哈顿距离替换欧氏距离，比较了自定义KNN的性能\n",
    "- 对比了自定义KNN与sklearn的KNN（欧氏距离和曼哈顿距离）\n",
    "## 结论\n",
    "自定义KNN算法在Iris数据集上表现良好，达到90%以上的准确率，与sklearn的KNN结果接近。欧氏距离和曼哈顿距离的性能差异较小，说明Iris数据集的特征分布对距离度量不敏感。sklearn的KNN可能因优化（如KD树）而略优于自定义实现。后续可尝试加权KNN或特征选择进一步提升性能。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.15"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
